package br.com.honorato.logger;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.interceptor.InvocationContext;

import br.com.honorato.util.LogUtil;

public class InterceptorDeCallback
{
	// Logger logger =
	// LogManager.getLogger(InterceptorDeCallback.class.getName());
	// Logger logger = LogManager.getLogger();
	// LogUtil.

	// Life cycle callback methods n�o podem propagar exce��es checked e
	// n�o retornam nada. N�o faz sentido um m�todo deste tipo propagar
	// uma exce��o checked uma vez que n�o h� um cliente para receber a
	// exce��o.

	// Um m�todo do tipo callback pode ser definido na pr�pria classe do
	// bean ou em uma classe interceptadora. Ou em ambas. M�todos
	// callback definidos em classes interceptadoras s�o conhecidos como
	// "lifecycle callback interceptors".

	@PostConstruct
	public void postconstruct(InvocationContext context)
	{
		// TODO; recuperar do bundle
		// logger.info(">>>>>>>>>>>> Executando postConstruct() de InterceptadorDeCallback");
		LogUtil.info(context.getTarget().getClass(), ">>>>>>>>>>>> coco Executando postConstruct() de InterceptadorDeCallback");

		try
		{ // A chamada ao m�todo proceed() garante que o pr�ximo m�todo
			// interceptador do ciclo de vida do bean ser� chamado.
			context.proceed();
		}
		catch (Exception e)
		{
			throw new RuntimeException(e);
		}

	}

	@PrePassivate
	public void prePassivate(InvocationContext context)
	{
		// TODO; recuperar do bundle
		// logger.info(">>>>>>>>>>>> Executando prePassivate() de InterceptadorDeCallback");
		LogUtil.info(context.getTarget().getClass(), ">>>>>>>>>>>> Executando prePassivate() de InterceptadorDeCallback");

		try
		{
			context.proceed();
		}
		catch (Exception e)
		{
			throw new RuntimeException(e);
		}
	}

	@PostActivate
	public void postActivate(InvocationContext context)
	{
		// TODO; recuperar do bundle
		// logger.info(">>>>>>>>>>>> Executando postActivate() de InterceptadorDeCallback");
		LogUtil.info(context.getTarget().getClass(), ">>>>>>>>>>>> Executando postActivate() de InterceptadorDeCallback");

		try
		{
			context.proceed();
		}
		catch (Exception e)
		{
			throw new RuntimeException(e);
		}

	}

	@PreDestroy
	public void preDestroy(InvocationContext context)
	{
		// TODO; recuperar do bundle
		// logger.info(">>>>>>>>>>>> Executando preDestroy() de InterceptadorDeCallback");
		LogUtil.info(context.getTarget().getClass(), ">>>>>>>>>>>> COCO Executando preDestroy() de InterceptadorDeCallback");

		try
		{
			context.proceed();
		}
		catch (Exception e)
		{
			throw new RuntimeException(e);
		}

	}
}